
package com.syu.loopcure.common.utils;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;

/**  
 * ClassName:SpringBeanUtils <br/>  
 * Date:     2020年8月12日 下午7:35:13 <br/>  
 * @author   zhucun  
 * @since    JDK 1.8  
 */
@Component
public class SpringBeanUtils implements ApplicationContextAware {
    
    private static ApplicationContext applicationContext = null;
    
    public SpringBeanUtils() {
        
    }

    @Override
    public void setApplicationContext(ApplicationContext context) throws BeansException {

        if(null == applicationContext) {
            applicationContext = context;
        }

    }

    public static ApplicationContext getApplicationContext() {
        return applicationContext;
    }

    /**
     * 
     * getBean:通过类型获取指定的Bean. <br/>  
     *  
     * @param name 名称
     * @return  {@link Object}
     * @since JDK 1.8  
     * @author zhucun  
     * @date 2020年8月12日 下午7:40:51
     * @modifier zhucun
     * @modifyDate 2020年8月12日 下午7:40:51
     */
    public static Object getBean(String name){
        return getApplicationContext().getBean(name);
    }

    /**
     *
     * getBean:通过class获取指定的Bean. <br/>  
     *  
     * @param clazz 类
     * @return  T
     * @since JDK 1.8  
     * @author zhucun  
     * @date 2020年8月12日 下午7:39:48
     * @modifier zhucun
     * @modifyDate 2020年8月12日 下午7:39:48
     */
    public static <T> T getBean(Class<T> clazz){
        return getApplicationContext().getBean(clazz);
    }

    /**
     * 
     * getBean:通过name，class返回指定的Bean. <br/>  
     *  
     * @param name 类名称
     * @param clazz 类
     * @return  T
     * @since JDK 1.8  
     * @author zhucun  
     * @date 2020年8月12日 下午7:38:57
     * @modifier zhucun
     * @modifyDate 2020年8月12日 下午7:38:57
     */
    public static <T> T getBean(String name,Class<T> clazz){
        return getApplicationContext().getBean(name, clazz);
    }

}
  
